OSSデータカタログAmundsenにRedshiftメタデータをロードしてみた
どーもsutoです。
登録したデータに対し、「Google検索」のようにデータの検索ができるLyft社製のOSSデータカタログAmundsenというデータ検出およびメタデータエンジンがあります。
今回はEC2上にセットアップしたAmundsenに、Redshift内のテーブルメタデータを読み込んでみました。
AmundsenをEC2にセットアップ
本記事ではAmazon Linux2にAmundsenをセットアップしていきます。
以下の参考記事ではローカルPC(Mac)の手順やUbuntu on EC2でAthenaテーブルを読み込む手順がありますので参考に。
まずはEC2インスタンスを作成します。作成するインスタンスは主に以下のようなパラメータで作成しました。
- インスタンスタイプ:
t3.medium
- EBS ボリューム:
20GB
- パブリックIP:有効化
- セキュリティグループ(SG):5000番を許可
- IAMロール:
AmazonSSMManagedInstanceCore
がアタッチされていること(セッションマネージャでインスタンスにログインして作業するため)
今回のRedshiftは既存で作成されている検証用のものを使用しており、パブリックアクセスが有効となっています。データは以下の開発者ガイドのチュートリアルにあるサンプルデータ(tikitdb)をロードしている状態です。
また、アクセスするRedshiftのSGには上記インスタンスのパブリックIPを許可しています。
インスタンスが起動完了したらセッションマネージャでログインします。
sh-4.2$ sudo su - ec2-user Last login: Fri Sep 10 01:02:29 UTC 2021 on pts/0 [ec2-user@ip-x-x-x-x ~]$
まずはAmundsenの要件で必要なパッケージをインストールしていきます。
sudo yum -y update sudo yum install git sudo yum install python3 echo 'alias python=python3.7' >> ~/.bashrc source ~/.bashrc python -V # Version3.7になることを確認 curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash - sudo yum install --enablerepo=nodesource nodejs node -v # Version12になることを確認
次にDocker-composeをインストールします。
sudo amazon-linux-extras install -y docker sudo systemctl enable docker sudo systemctl start docker sudo usermod -a -G docker ec2-user sudo curl -L https://github.com/docker/compose/releases/download/1.28.5/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose sudo gpasswd -a $USER docker docker-compose --version # バージョンが表示されることを確認
ここでインスタンスを再起動を行い、Docker-composeをインストール完了です。
再びログイン後、Elasticsearchのメモリ上限を上げておきます。
sudo vi /etc/sysctl.conf # vm.max_map_count=262144に変更して保存 sudo sysctl -p /sbin/sysctl -a # 変更されていることを確認
git cloneでAmundsenをインストールしてビルド、起動します。
git clone --recursive https://github.com/amundsen-io/amundsen.git cd amundsen docker-compose -f docker-amundsen.yml up -d # docker-compose -f docker-amundsen.yml logs -f (ログ記録)
これで初期設定は完了です。ブラウザでhttp://<EC2のパブリックIP>:5000
にアクセスしAmundsenのWeb画面が表示されることを確認しておきます。
Redshiftスキーマの読み込み
仮想環境を立ち上げ、RedshiftデータロードのPythonスクリプト実行に必要なモジュールをインストールします。その後setup.py
を実行します。
※psycopg2が足りなかったので、手動でインストールしています。(またはrequirements.txt
に含めてもOKです)
cd ~/amundsen/databuilder python3 -m venv venv source venv/bin/activate # (venv) $ (ここからvenv環境下で実行します) pip3 install --upgrade pip pip3 install -r requirements.txt pip install psycopg2 python3 setup.py install
次にsample_postgres_loader.py
を以下のように編集します。(このスクリプトはPostgreSQLのデータベースを読み込むものなので、RDS、Redshift、ローカルサーバなどPostgreであればどれでも使用可能です)
vi example/scripts/sample_postgres_loader.py
import logging # ~~省略~~ # todo: connection string needs to change def connection_string(): user = '<Redshiftのユーザ名>' password = '<RedshiftユーザのPassword>' host = '<Redshiftのエンドポイント>' port = '5439' db = '<データベース名>' return "postgresql://%s:%s@%s:%s/%s" % (user, password, host, port, db) def run_postgres_job(): where_clause_suffix = textwrap.dedent(""" schemaname = '<取り込むスキーマ名>' """) # ~~省略~~ job_config = ConfigFactory.from_dict({ f'extractor.postgres_metadata.{PostgresMetadataExtractor.DATABASE_KEY}': 'redshift', # source名をredshiftに変更するためにこちらの行を追記しました(デフォルト名は'postgres'のため) f'extractor.postgres_metadata.{PostgresMetadataExtractor.WHERE_CLAUSE_SUFFIX_KEY}': where_clause_suffix, # ~~省略~~ job_es_table.launch()
スクリプトを実行し、完了後にAmundsenの画面を確認してみます。
python3 example/scripts/sample_postgres_loader.py
テーブル名「users」で検索してSource名が「Redshift」のテーブルが表示されることが確認できました。その他にスキーマ名、列名で検索することもできます。
しかし、文字列の部分一致では検索結果に引っかかりませんでした(例えば”user”で検索してもusersテーブルは表示されませんでした)ので、その辺は注意が必要です。